﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using System.Text.RegularExpressions;
using System.Collections.Specialized;

public partial class genTipoDocumentoEditar : ObjectPage
{
    #region CONSTANTES

    private const string RUTA_LISTA = "~/Gen/genTipoDocumentoListar.aspx";

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuEditarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {
            Cargar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        //if (IsValid) { 
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Aceptar":
                Guardar("G");
                break;
            case "Aplicar":
                Guardar("A");
                break;
            case "Cancelar":
                Salir();
                break;
        }
        //}
    }

    protected void lvAplicacion_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            CheckBox chkSeleccion = (CheckBox)e.Item.FindControl("chkSeleccion");
            chkSeleccion.Checked = Convert.ToBoolean(DataBinder.Eval(e.Item.DataItem, "Seleccion"));
            chkSeleccion.Enabled = !(Request.QueryString["a"] == "d");
            chkSeleccion.CssClass = "chkAplicacion";
        }
    }

    #endregion

    #region METODOS

    protected void Cargar()
    {
        string strAccion = Request.QueryString["a"];   //a: N-Nuevo, e-Editar, v-Ver
        string strId = Request.QueryString["i"];  //Id

        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");

        ActivarTabs(true);
        switch (strAccion)
        {
            case "n":
                Master.SubTitulo.Text = Resources.resDiccionario.Nuevo;
                Nuevo();
                break;
            case "e":
                Master.SubTitulo.Text = Resources.resDiccionario.Editar;
                Editar(strAccion, strId);
                break;
            case "d":
                Master.SubTitulo.Text = Resources.resDiccionario.Inactivar;
                Editar(strAccion, strId);
                break;
            default:
                Master.SubTitulo.Text = Resources.resDiccionario.Unknow;
                break;
        }

        ListarAplicaciones();
    }

    protected void Nuevo()
    {
        hfIdTipoDocumento.Value = "0";
        hfAccion.Value = "n"; //Nuevo
        txtCodigo.Text = string.Empty;
        txtDescripcion.Text = string.Empty;

        //Datos de Auditoria
        ddlEstado.SelectedIndex = 0; //Representa el primero
        txtUsuarioCreacion.Text = string.Empty;
        txtFechaCreacion.Text = string.Empty;
        txtUsuarioModificacion.Text = string.Empty;
        txtFechaModificacion.Text = string.Empty;
    }

    protected void Editar(string pstrAccion, string pstrIdUnidadMedida)
    {

        WCTipoDocumento.BETipoDocumento be = new WCTipoDocumento.BETipoDocumento
        {
            IdTipoDocumento = Int32.Parse(pstrIdUnidadMedida)
        };
        be = Obtener(be);

        hfIdTipoDocumento.Value = pstrIdUnidadMedida;
        hfAccion.Value = pstrAccion;
        txtCodigo.Text = be.CodigoDocumento;
        txtDescripcion.Text = be.Descripcion;


        chkEsAdelanto.Checked = be.EsAdelanto == "S" ? true : false;

        chkGeneraProvision.Checked = be.GenerarProvision == "S" ? true : false;
        chkAdelantoMultiple.Checked = be.AdelantoMultiple == "S" ? true : false;
        chkEsFiscal.Checked = be.EsFiscal == "S" ? true : false;
        chkControlPresupuestal.Checked = be.ControlPresupuestal == "S" ? true : false;
        txtAdelantoCuentaLocal.Text = be.AdelantoCuentaLocal;
        txtAdelantoCuentaDolares.Text = be.AdelantoCuentaDolares;


        //Datos de Auditoria
        Util.SelectCombo(ddlEstado, be.Estado);
        txtUsuarioCreacion.Text = be.UsuarioCreacion;
        txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
        txtUsuarioModificacion.Text = be.UsuarioModificacion;
        txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

        if (pstrAccion == "d")
        {
            Master.MenuAplicar.Visible = false; //Remueve el boton aplicar
            txtCodigo.Enabled = false;
            txtDescripcion.Enabled = false;
            ddlEstado.Enabled = false;

            if (be.Estado == Constantes.ESTADO_ACTIVO)
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_INACTIVO);
            else
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_ACTIVO);
        }
    }

    protected bool Validar(out WCTipoDocumento.BETipoDocumento pbe)
    {
        pbe = new WCTipoDocumento.BETipoDocumento();
        string strCodigoUnidadMedida = string.Empty, strDescripcion = string.Empty;
        string strEstado = string.Empty;
        string strAccion = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver

        strCodigoUnidadMedida = txtCodigo.Text.Trim();
        strDescripcion = txtDescripcion.Text.Trim();
        strEstado = ddlEstado.SelectedValue;

        //Inicializa
        WCTipoDocumento.BETipoDocumento be = new WCTipoDocumento.BETipoDocumento
        {
            IdTipoDocumento = Int32.Parse(hfIdTipoDocumento.Value),
            CodigoDocumento = strCodigoUnidadMedida,
            Descripcion = strDescripcion,

            EsAdelanto = chkEsAdelanto.Checked ? "S" : "N",
            GenerarProvision = chkGeneraProvision.Checked ? "S" : "N",
            AdelantoMultiple = chkAdelantoMultiple.Checked ? "S" : "N",
            EsFiscal = chkEsFiscal.Checked ? "S" : "N",
            ControlPresupuestal = chkControlPresupuestal.Checked ? "S" : "N",

            AdelantoCuentaLocal = txtAdelantoCuentaLocal.Text,
            AdelantoCuentaDolares = txtAdelantoCuentaDolares.Text,

            Estado = strEstado,
            UsuarioCreacion = UsuarioSistema.CodigoUsuario,
            FechaCreacion = DateTime.Now,
            UsuarioModificacion = UsuarioSistema.CodigoUsuario,
            FechaModificacion = DateTime.Now
        };

        CheckBox chkSeleccion = null;  
        
        List<WCTipoDocumento.BETipoDocumentoAplicacion> lstAplicacion = new List<WCTipoDocumento.BETipoDocumentoAplicacion>();
        WCTipoDocumento.BETipoDocumentoAplicacion beAplicacion = null;
        for (int i = 0; i < lvAplicacion.Items.Count; i++)
        {
            chkSeleccion = (CheckBox)lvAplicacion.Items[i].FindControl("chkSeleccion");
            if (Convert.ToBoolean(lvAplicacion.DataKeys[i]["Seleccion"]) != chkSeleccion.Checked)
            {
                beAplicacion = new WCTipoDocumento.BETipoDocumentoAplicacion();
                beAplicacion.IdTipoDocumento= be.IdTipoDocumento;
                beAplicacion.IdAplicacion = int.Parse(lvAplicacion.DataKeys[i].Value.ToString());
                beAplicacion.Estado = chkSeleccion.Checked ? Constantes.ESTADO_ACTIVO : Constantes.ESTADO_INACTIVO;
                beAplicacion.UsuarioCreacion = UsuarioSistema.CodigoUsuario;
                lstAplicacion.Add(beAplicacion);
            }
        }

        be.Aplicaciones = lstAplicacion.ToArray();
        pbe = be;
        return true;
    }

    protected void Guardar(string pstrEvento) //G:Grabar, A:Aplicar
    {
        string strAccion = string.Empty;
        string strUsuario = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver
        strUsuario = UsuarioSistema.CodigoUsuario;

        WCTipoDocumento.BETipoDocumento be;

        if (!Validar(out be)) //Valida e Inicializa
        {
            return;
        }

        //Grabar
        switch (strAccion)
        {
            case "n": //Nuevo
                be = Insertar(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorRegistrar));
                }
                hfAccion.Value = "e";
                hfIdTipoDocumento.Value = be.IdTipoDocumento.ToString();
                txtCodigo.Text = be.CodigoDocumento;

                txtUsuarioCreacion.Text = strUsuario;
                txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                break;
            case "e": //Actualiza
                be = Actualizar(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                break;
            case "d": //Elimina
                be = Eliminar(be);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                break;
        }
        if (pstrEvento == "G") //Si es GRABAR redirecciona a la Lista
        {
            if (be.Error == 0)
                Salir();
        }
    }

    protected void Salir()
    {
        string FiltroParam = Request.QueryString["f"];
        Util.Redireciona(RUTA_LISTA, "?a=l&f=" + FiltroParam, true);
    }

    protected void ActivarTabs(bool blnActivar)
    {
        lnkUnidadMedida.HRef = blnActivar ? string.Format("#{0}", tabPrincipal.ClientID) : string.Empty;
        lnkAplicacion.Attributes["href"] = blnActivar ? string.Format("#{0}", tabAplicacion.ClientID) : string.Empty;

        liUnidadMedida.Visible = blnActivar;
        liAplicacion.Visible = blnActivar;

        tabPrincipal.Visible = blnActivar;
        tabAplicacion.Visible = blnActivar;
    }

    protected void ListarAplicaciones()
    {
        int intIdUnidadMedida = 0;
        if (!string.IsNullOrEmpty(hfIdTipoDocumento.Value))
            intIdUnidadMedida = int.Parse(hfIdTipoDocumento.Value);
        //Filtrar
        DataTable dt = ListarAplicaciones(intIdUnidadMedida);
        lvAplicacion.DataSource = dt;
        lvAplicacion.DataBind();
    }

    #endregion

    #region LLAMDAS A WEBSERVICES

    protected WCTipoDocumento.BETipoDocumento Insertar(WCTipoDocumento.BETipoDocumento pbe)
    {
        WCTipoDocumento.BETipoDocumento be = new WCTipoDocumento.BETipoDocumento();
         
        using (var client = new ServiceClient<WCTipoDocumento.IWCTipoDocumento>("BasicHttpBinding_IWCTipoDocumento"))
        {
            be = client.ServiceOperation<WCTipoDocumento.BETipoDocumento>(c => c.Insertar(pbe) );
                
        }
        return be;
    }

    protected WCTipoDocumento.BETipoDocumento Obtener(WCTipoDocumento.BETipoDocumento pbe)
    {
        WCTipoDocumento.BETipoDocumento be = new WCTipoDocumento.BETipoDocumento();
        
        using (var client = new ServiceClient<WCTipoDocumento.IWCTipoDocumento>("BasicHttpBinding_IWCTipoDocumento"))
        {
            be = client.ServiceOperation<WCTipoDocumento.BETipoDocumento>(c => c.Obtener(pbe) );
             
        }
        return be;
    }

    protected WCTipoDocumento.BETipoDocumento Actualizar(WCTipoDocumento.BETipoDocumento pbe)
    {
        WCTipoDocumento.BETipoDocumento be = new WCTipoDocumento.BETipoDocumento();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCTipoDocumento.IWCTipoDocumento>("BasicHttpBinding_IWCTipoDocumento"))
        {
            be = client.ServiceOperation<WCTipoDocumento.BETipoDocumento>(c => c.Actualizar(pbe));
          
        }
        return be;
    }

    protected WCTipoDocumento.BETipoDocumento Eliminar(WCTipoDocumento.BETipoDocumento pbe)
    {
        WCTipoDocumento.BETipoDocumento be = new WCTipoDocumento.BETipoDocumento();
        
        using (var client = new ServiceClient<WCTipoDocumento.IWCTipoDocumento>("BasicHttpBinding_IWCTipoDocumento"))
        {
            be = client.ServiceOperation<WCTipoDocumento.BETipoDocumento>( c => c.Eliminar(pbe));
             
        }
        return be;
    }

    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarAplicaciones(int pintId)
    {
        
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCTipoDocumento.IWCTipoDocumento>("BasicHttpBinding_IWCTipoDocumento"))
        {
            dt = client.ServiceOperation<DataTable>(c => c.ListarAplicacion(pintId).Tables[0] );
               
              
            
            
        }
        return dt;
    }
    #endregion
}